MiguoQAQ
文章5
标签2
分类0

文章归档

pearlCTF [Forensics]SoundScape WP by MiguoQAQ

pearlCTF [Forensics]SoundScape WP by MiguoQAQ

SoundScape#

第四个是我所在的队伍!我是第四个做出来的!耶!

👇以下为WriteUp👇

给了三个音频,说音频就是图片,看看音频们

全都是这样的格式,肯定是高低对应10没错了,而且数量如此之多,猜测是文件的二进制值

但为什么有三个这样的文件呢?

文件的名字经过搜索并没有什么特别的,但是大写的首字母是RGB,思路变得清晰起来了!

接下来就是拿到数据和脚本运算了

打开010看看能不能从文件格式内得到信息

经过比较Audacity内的信息,发现wav文件并没有被压缩破坏,还是很有灵性的~导出16进制,把7F改成1,把00改成0就可以得到二进制了,其他两个文件同理。

把得到的0101……信息存储到txt文件里,命名为Raine1.txt

因为得到的01二进制数据有1769472位,每8位转换成一个2位的16进制数,所以得到的数据对应的有221184个,分离因数可以猜出图片大小

接下来就是写脚本环节!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import numpy as np
import matplotlib.pyplot as plt

def convert_binary_to_hex(binary_string):
decimal_value = int(binary_string, 2)
hex_string = format(decimal_value, '02X')
return hex_string

def main():
with open('Raine1.txt', 'r') as file1, open('Gideon1.txt', 'r') as file2, open('Beryl1.txt', 'r') as file3:
binary1 = file1.read()
binary2 = file2.read()
binary3 = file3.read()

hex_colors = []
for i in range(0, len(binary1), 8):
r = convert_binary_to_hex(binary1[i:i+8])
g = convert_binary_to_hex(binary2[i:i+8])
b = convert_binary_to_hex(binary3[i:i+8])
hex_colors.append((r+g+b))
#print(hex_colors)
#这里可以打印出来一些RGB像素数据来判断进制转换是否正确

# 将16进制颜色转换为RGB格式
rgb_colors = [tuple(int(hex[i:i + 2], 16) for i in (0, 2, 4)) for hex in hex_colors]

# 创建一个数组以存储像素值
image_array = np.array([rgb_colors], dtype=np.uint8)

# 调整数组形状以匹配图像尺寸
#这里我发现的图片尺寸是384*576
image_array = image_array.reshape(384, 576, 3)

# 绘制图像
plt.imshow(image_array)
plt.axis('off')

# 保存图像为文件
plt.savefig('output_image.png')


if __name__ == "__main__":
main()

运行一下,就可以得到图片力

本文作者:MiguoQAQ
本文链接:https://miguoqaq.github.io/2024/03/10/pearlCTF%20[Forensics]SoundScape%20WP%20by%20MiguoQAQ/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可
本站总访问量
本站访客数人次